integer toggle = TRUE;
string targetname = "Beach Ball (drag to ground)";
integer s1 = FALSE;

default
{
    state_entry()
    {
        llSetStatus(STATUS_DIE_AT_EDGE,TRUE);
        llSetStatus(STATUS_PHYSICS,TRUE);
        llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y,FALSE);
        llCollisionSound("Boing",0.5);
    }
    on_rez(integer sp)
    {
        if(sp!=0)
            state run;
    }

    touch_start(integer total_number)
    {
        if(llGetOwner()==llDetectedKey(0))
            state run;
    }
}
state run
{
    state_entry()
    {
        llSensorRepeat(targetname,NULL_KEY,
            ACTIVE | PASSIVE,30,PI,1.0);
        //llApplyImpulse(<llFrand(1.0)-0.5,0,llFrand(0.8)>,TRUE);
        //llSetTimerEvent(1.0);
    }
    sensor(integer n)
    {
        integer dir = -1;
        if(toggle)
            dir = 1;
        toggle = !toggle;
        vector offset = llVecNorm(llDetectedPos(0)-llGetPos()) * dir;
        offset.z += llFrand(0.4);
        if(toggle)
        {
            // awway from 
            llApplyImpulse(offset * 0.3,FALSE);
            if(s1) llTriggerSound("Boing",0.5);
        }
        else
        {
            // toward
            llApplyImpulse(offset,FALSE);
            if(s1) llTriggerSound("Boing",0.5);
        }
    }
    no_sensor()
    {
        if(llGetStatus(STATUS_PHYSICS)!=TRUE)
            llSetStatus(STATUS_PHYSICS,TRUE);
        if(llVecMag(llGetVel())<0.1)
        {
            if(s1) llTriggerSound("Boing",0.5);
            llApplyImpulse(<llFrand(1.0)-0.5,0,llFrand(1.0)>,TRUE);
        }
    }
    
}
